﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Dziennik_ProfilNauczyciela {
    public partial class Form_WidokNauczyciela : Form {
        
        class RekordTabeliWiadomosci {
            public Bitmap ikona { get; set; }
            public string data { get; set; }
            public string nadawca { get; set; }
            public string temat { get; set; }
            public string tresc { get; set; }
            public bool przeczytana { get; set; }
            public int idNadawcy { get; set; }
            public int id { get; set; }
        }

        void OdswiezTabeleWiadomosci() {
            Image[] znaczniki = new Bitmap[3] { 
                Dziennik_ProfilNauczyciela.Properties.Resources.circle_blue,
                Dziennik_ProfilNauczyciela.Properties.Resources.circle_red,
                Dziennik_ProfilNauczyciela.Properties.Resources.circle_green
            };            

            List<RekordTabeliWiadomosci> lista1 =
                (from wu in SQLInterface.linqDataContext.nauczyciel_wiadomosci_uczniows.AsEnumerable()
                 select new RekordTabeliWiadomosci { przeczytana = (bool)wu.przeczytana, id = (int)wu.id, ikona = (Bitmap)znaczniki[2], data = (string)wu.czas.ToShortDateString() + " " + (string)wu.czas.ToShortTimeString(), nadawca = (string)(wu.imie + " " + wu.nazwisko + ", kl. " + wu.klasa), temat = wu.temat, tresc = wu.tresc, idNadawcy = wu.userIdNadawcy })
                .ToList<RekordTabeliWiadomosci>();
            List<RekordTabeliWiadomosci> lista2 =
                 (from wn in SQLInterface.linqDataContext.nauczyciel_wiadomosci_nauczycielis.AsEnumerable()
                  select new RekordTabeliWiadomosci { przeczytana = (bool)wn.przeczytana, id = (int)wn.id, ikona = (Bitmap)znaczniki[1], data = (string)wn.czas.ToShortDateString() + " " + (string)wn.czas.ToShortTimeString(), nadawca = (string)(wn.imie + " " + wn.nazwisko), temat = wn.temat, tresc = wn.tresc, idNadawcy = wn.userIdNadawcy })
                 .ToList<RekordTabeliWiadomosci>();
            List<RekordTabeliWiadomosci> lista3 =
                 (from wo in SQLInterface.linqDataContext.nauczyciel_wiadomosci_opiekunows.AsEnumerable()
                  select new RekordTabeliWiadomosci { przeczytana = (bool)wo.przeczytana, id = (int)wo.id, ikona = (Bitmap)znaczniki[0], data = (string)wo.czas.ToShortDateString() + " " + (string)wo.czas.ToShortTimeString(), nadawca = (string)(wo.imie + " " + wo.nazwisko), temat = wo.temat, tresc = wo.tresc, idNadawcy = wo.userIdNadawcy })
                 .ToList<RekordTabeliWiadomosci>();
            List<RekordTabeliWiadomosci> listaWiadomosci = new List<RekordTabeliWiadomosci>();
            if (checkBox_Uczniowie.Checked) listaWiadomosci.AddRange(lista1);
            if (checkBox_Nauczyciele.Checked) listaWiadomosci.AddRange(lista2);
            if (checkBox_Opiekunowie.Checked) listaWiadomosci.AddRange(lista3);
            dataGridView1.DataSource = listaWiadomosci;

            dataGridView1.ClearSelection();
            PogrubPrzeczytane();
            dataGridView1.Refresh();
        }

        void UsunWiadomosci(List<int> listaId) {
            SqlCommand c;
            string idString = "";
            foreach (int i in listaId) {
                idString += (i+",");
            }
            c = new SqlCommand("delete dziennik.dbo.wiadomosci where id in ("+idString.Remove(idString.Length-1)+")", SQLInterface.conn);
            c.ExecuteNonQuery();
        }


        void OznaczJakoPrzeczytane(List<int> listaId) {
            string idString = "";
            foreach (DataGridViewRow r in dataGridView1.Rows) {
                if (listaId.Contains(((RekordTabeliWiadomosci)r.DataBoundItem).id)) {
                    idString += ((RekordTabeliWiadomosci)r.DataBoundItem).id + ",";
                    ((RekordTabeliWiadomosci)r.DataBoundItem).przeczytana = true;
                }
            }
            SqlCommand c = new SqlCommand("update dziennik.dbo.wiadomosci set przeczytana = 1 where id in (" + idString.Remove(idString.Length - 1) + ")", SQLInterface.conn);
            c.ExecuteNonQuery();
            PogrubPrzeczytane();
        }


        void OznaczJakoPrzeczytane(int id) {
            OznaczJakoPrzeczytane(new List<int>() { id });        
        }

        void PogrubPrzeczytane() {
            DataGridViewCellStyle styl_nieprzeczytane = new DataGridViewCellStyle();
            foreach (DataGridViewRow r in dataGridView1.Rows) {
                if (((RekordTabeliWiadomosci)r.DataBoundItem).przeczytana == false) {
                    r.DefaultCellStyle.Font = new Font(dataGridView1.DefaultCellStyle.Font, FontStyle.Bold);
                }
                else {
                    r.DefaultCellStyle.Font = new Font(dataGridView1.DefaultCellStyle.Font, FontStyle.Regular);
                }
            }
        }
    }
}